/**
 * @description 小程序更新提示功能，如果是不支持的平台则直接resolve，不提示更新
 * @returns {Promise} 抛出成功，让调用地方进行下一步操作
 * @author yinzhi
 * @date 2025-05
 */
export function checkUpdate() {
    return new Promise(resolve => {
        // #ifdef H5
        //   H5端暂不支持更新提示功能
        resolve('update failed')
        // #endif
        // #ifdef APP-PLUS
        //   APP端暂不支持更新提示功能
        resolve('update failed')
        // #endif
        // 获取小程序的运行环境，如果不是生产环境则不需要进行更新检测
        const accountInfo = uni.getAccountInfoSync()
        const { envVersion } = accountInfo.miniProgram
        if (envVersion !== 'release') {
            resolve('update failed')
        }
        // 除了H5和APP端，其他端均支持更新提示功能
        const updateManager = uni.getUpdateManager()
        updateManager.onCheckForUpdate(res => {
            if (!res.hasUpdate) {
                // 没有更新时直接resolve
                resolve('no update')
            }
        })
        // 检查是否有新版本
        updateManager.onUpdateReady(() => {
            uni.showModal({
                title: '更新提示',
                content: '检测到应用有新版本可更新，是否更新应用？',
                cancelColor: '#666666',
                confirmColor: '#da8c10',
                success: res => {
                    if (res.confirm) {
                        updateManager.applyUpdate()
                        resolve('update applied')
                    } else {
                        resolve('update cancelled')
                    }
                }
            })
        })
        // 更新失败提示
        updateManager.onUpdateFailed(() => {
            uni.showModal({
                title: '更新提示',
                content: '新版本下载失败，请检查网络后重试',
                showCancel: false,
                confirmColor: '#da8c10',
                complete: () => {
                    resolve('update failed')
                }
            })
        })
    })
}
